home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
FAQSYS18.ZIP
/
FAQS.DAT
/
WEITEK.TXT
< prev
next >
Wrap
Text File
|
1996-01-04
|
36KB
|
787 lines
Weitek
W5086
W5186 1MB, BitBlt, Line draw
W5286 As W5186 + Color expansion and fills
Power9000 Max 2MB. Not VGA compatible, but VGA chip can be added.
Accelerates 8bit operations.
Power9001 PCI version of the Power9000
Power9100 New version with a W5286 like VGA part built in. can handle
8MB and accelerates 8/16/32bit operations
Power9130 Video accelerator
W5x86 series:
3C0h index 15h (R/W): Overscan Color High
3C4h (R/W): Sequencer Index Register
bit 0-2 Sequencer index bits 0-2
3 (W5086,W5186) Enable additional registers. If set enables registers
at 300h, 301h, 30Ah, 320h and 32Ah
4 Sequencer index high bit
3C4h index 5 (W): Control Register 0
bit 2 SRS17. CRTC Display Start Address bit 16. Bits 0-15 are in 3d4h
index 0Ch,0Dh
6 BO. Bit Order. If clear bit 0 is displayed first (VGA)
7 DVSAE. Dual Video Start Address/Offset Enable
3C4h index 6 (W): Control Register 1
bit 3 BSE. Special Text Attributes. If set the text attributres are
defined as follows:
bit 0 Color 0 (Half bright in monochrome)
1 Underline
2 Reverse Video
3 Blinking
4 Bold
5 Struck Through
6 Color 1
7 Color 2
6 GHAE. Graphics Accelerator Enable. 0: Halt, 1: Enable
3C4h index 07h (R): Revision Register
Bit 0-2 Revision Level.
5-7 Chip ID. 1: W5186, 2: W5286 or P9100 (0: W5086 ???)
3C4h index 10h (R): User Bits
bit 0-3 Manufacturer information. Read from straps at power-up.
4-7 Always returns 9 for the W5186, 5 for the W5286 & P9100.
3C4h index 10h (W): I/O Base
bit 0-7 Defines the upper 8 bits of the I/O base address. Default is 3 to
map the registers at 3xxh
3C4h index 11h (R/W): Miscellaneous
bit 5 Clear to enable extensions
6 Clear to enable bank addressing
Note: to update this register, first it must be read and the value
rewritten twice, then the changed value can be written
3C4h index 12h (R/W): Output Control
bit 5-6 3 for 640x480, 1 for 800x600, 0 else
6-7 (W5286) Memory. 0: 256K, 1: 512K, 2: 1MB
7
3C4h index 13h (R/W): Memory Base
bit 0-3 Base Memory address. Defines the location of the 1MB Linear Aperture
in units of 1MB.
3CDh (R/W): Bank Register
bit 0-3 Write Bank
4-7 Read bank
3CEh (R/W): Graphics Controller Index Register
bit 0-3 Index
7 (R) Graphics Engine Busy if set
3CEh index 09h (R/W): GHA Queue Base Address
bit 0-7 Base address of the Instruction Queue in units of 1KB (?). The
Graphics engine uses a 4KByte Instruction Queue of 256 16byte
instructions. Each instruction has this format:
Byte Bit Description
00h 0-3 Plane Mask. Each bit set enables writing in the
corresponding plane
4 Sync. If set the instruction is delayed until Vertical
Retrace occurs
5-7 Opcode. 0: Short BitBLT, 1: Long BitBLT, 2: Short Screen
Move, 3: Long Screen Move, 4: Steep Line Draw, Flat Line
Draw, 6: Block Move, 7: NOP
01h 0-7 Start Mask. Each bit set enables writing to the
corresponding bits in the first byte of each scanline
02h 0-15 (BitBLT) Horizontal Total. The width of the blit area in
bytes (-1)
02h 0-15 (Linedraw) Line Decrement. The amount to subtract from
the error term when moving parallel to the minor axis
04h 0-3 Source Inversion Mask. Each bit if set causes source data
from the corresponding plane to be inverted before
applying the operation in Byte 05h (Color Plane Logical
Operation).
4-7 Destination Inversion Mask. Each bit if set causes
destination data from the corresponding plane to be
inverted before applying the operation in Byte 05h (Color
Plane Logical Operation).
05h 0-3 Color Plane Logical Operation 0 (LOP0)
4-7 Color Plane Logical Operation 1 (LOP1)
The logical operation for each plane is controlled by one
bit from LOP0 and one from LOP1
LOP1 LOP0 Operation
0 0 Store (NOP)
0 1 AND
1 0 OR
1 1 XOR
06h 0-7 End Mask. Each bit set enables writing to the
corresponding bits in the last byte of each scanline
07h 0-7 Vertical Total. Height of the blit area in scanlines.
Bits 8-9 are in Byte 0Dh bits 6-7.
08h 0-15 Destination Address. The offset from start of display
memory in bytes. Bits 16-17 are in Byte 0Dh bits 1-2
0Ah 0-15 (BitBLT) Source Address. The offset from start of display
memory in bytes. Bits 16-17 are in Byte 0Fh bits 1-2.
0Ah 0-15 (Linedraw) Line Initial Error. The Initial Error Term
0Ch 0-7 Destination Pitch. The number of bytes in each scanline
at the destination. This is a 9bit two's complement value
(Bit 8 is in Byte 0Dh bit 0). Use a negative value if DIR
(Byte 0Fh bit 7) is set
0Dh 0 Destination Pitch bit 8. Bits 0-7 are in Byte 0Ch
1-2 Destination Address bits 16-17. Bits 0-15 are in Bytes
08h,09h
3-5 Rotate Count. Number of bits to right-shift
6-7 Vertical Total bits 8-9. Bits 0-7 are in Byte 07h
0Eh 0-7 (BitBLT) Source Pitch. The number of bytes in each
scanline at the source. This is a 9bit two's complement
value (Bit 8 is in Byte 0Fh bit 0). Use a negative value
if DIR (Byte 0Fh bit 7) is set
0Eh 0-7 (Linedraw) Line Increment. The amount to add to the
error term when moving parallel to the major axis
0Fh 0-5 (Linedraw) Line Increment bits 8-13. Bits 0-7 are in Byte
0Eh
0 (BitBLT) Source Pitch bit 8. Bits 0-7 are in Byte 0Eh
1-2 (BitBLT) Source Address bit 16-17. Bits 0-15 are in Byte
0Ah, 0Bh
3-4 (BitBLT) Expansion Source. Selects the plane that holds
the source for the expansion.
5 (BitBLT) Expansion enable. If set color expansion is
enabled
6 Interrupt Disable. If clear an interrupt is generated
when the current instruction completes
7 Direction. If set the destination and source are
processed right-to-left and bottom-to-top
3CEh index 0Ah (R/W): GHA Queue Tail Pointer
bit 0-7 Points to the entry in the Instruction Queue where we put the next
instruction. First write the instruction to this position, then
increment this register
3CEh index 0Bh (R/W): GHA Queue Execution Pointer
bit 0-7 Points to the currently (or most recently) executing instruction in
the Instruction Queue.
3CEh index 0Ch (W): Extended Graphics
bit 2 Set in extended 256 color modes
3CEh index 0Dh (R/W): GHA Bit Mask (5286)
bit 0-7 Each bit enables updating the corresponding bit in each byte
3CEh index 0Eh W(R/W): BCOLOR (5286)
bit 0-15 Background color for color expansion.
3d4h index 19h (R/W): Interlace
3d4h index 1Ah (R/W): Serial Start Address High
bit 0-7 Bits 8-15 of the Start Address of the second frame buffer
3d4h index 1Bh (R/W): Serial Start Address Low
bit 0-7 Bits 0-7 of the Start Address of the second frame buffer
3d4h index 1Ch (R/W): Serial Offset
bit 0-7 CRTC Offset for the second frame buffer
3d4h index 1Dh (R/W): Total Characters Per Line
bit 0-7 Number of character clocks displayed per line for the second frame
buffer
ID Weitek VGA:
old:=rdinx(SEQ,$11);
outp(SEQ+1,old);
outp(SEQ+1,old);
outp(SEQ+1,inp(SEQ+1) or $20);
if not testinx(SEQ,$12) then
begin
x:=rdinx(SEQ,$11);
outp(SEQ+1,old);
outp(SEQ+1,old);
outp(SEQ+1,inp(SEQ+1) and $DF);
if testinx(SEQ,$12) and tstrg($3CD,$FF) then
begin
_Weitek chip_
end;
end;
wrinx(SEQ,$11,old);
Video Modes:
0054h T 132 43
0055h T 132 25
0056h T 132 43 4color
0057h T 132 25 4color
0058h G 800 600 16c PL4
0059h G 800 600 16c PL4
005Ah G 1280 1024 16c PL4
005Ch G 800 600 256c P8
005Dh G 1024 768 16c PL4
005Eh G 1024 768 256c P8
005Fh G 640 480 256c P8
0064h T 132 60
0065h T 132 50
0066h T 132 60 4c
0067h T 132 50 4c
0068h T 80 60
0069h G 640 480 16m P24
006Ah G 800 600 16c PL4
006Ch G 640 480 32Kc P15
006Dh G 800 600 32Kc P15
006Eh G 640 480 64Kc P16
006Fh G 800 600 64Kc P16
Power 9000/9100:
The Power 9000 and 9100 have different memory and register layouts.
Also the different brands of Power9000/9100 boards all have different
Linear Aperture addresses, DAC access and special registers
The registers and video memory of the Power 9000 are mapped in a 4MB linear
memory block staring at M (typically 20000000h, 80000000h or A0000000h):
M+000000h - M+0FFFFFh (1MB) Non-Power 9000 use
M+100000h - M+1FFFFFh (1MB) Registers. The registers are 32bit and internally
stored in Big Endian format. Bits 16-18 of the
address are used to access the register with
different combinations of bit, byte and halfword
(16bit) swaps:
+00000h
+10000h Swap bits
+20000h Swap bytes
+30000h Swap bytes and bits
+40000h Swap Halfwords
+50000h Swap Halfwords and bits
+60000h Swap Halfwords and bytes
+70000h Swap Halfwords, bytes and bits
Bits 13-15 of the address appears to be ignored.
M+200000h - M+3FFFFFh (2MB) Video memory
The Power9100 has a more compact register layout where the registers are in
one 32Kbyte block, accessible either at A000h or in the Linear Aperture.
Swapping of bits/bytes/halfword are controlled from a register.
The registers below are shown as M+xxxh, where M+xxxh is the Power9100 address
(even if the register does not exist for the Power9100). The corresponding
Power9000 address can be found as:
Power9100 Power9000
0000h - 1FFFh 100000h - 101FFFh
2000h - 3FFFh 180000h - 181FFFh
4000h - 7FFFh No match
The swap flags are added to the Power9000 address in bits 16-18 (see above).
3C4h index 12h (R/W):
bit 0-1 Base Address. 0: None, 1: A0000000h, 2: 20000000h, 3: 80000000h
2 Should be 0
3 Should be 1
4 P9000 Enabled if set, disable if clear
5 HSync polarity. Positive if clear, negative if set
6 VSync polarity. Positive if clear, negative if set
7 W5186 (or other VGA) Enabled if set, disabled if clear
3CDh (R/W): Bank Register: (Viper)
bit 0-5 Bank number. Maps a 64K block of the 4MB linear block at A000h, thus:
00h - 0Fh Maps 64K of the non-Power 9000 block
10h - 1Fh Maps a 64K Register block
20h - 3Fh Maps 64K of the Video memory
Note: This register only exists in the Viper (non-PCI versions) and is
implemented by external logic.
XXXXh (R/W): PCI Bank Register (Viper PCI)
bit 1-6 Bank number. Maps a 64K block of the 4MB linear block at A000h, thus:
00h - 0Fh Maps 64K of the non-Power 9000 block
10h - 1Fh Maps a 64K Register block
20h - 3Fh Maps 64K of the Video memory
Note: This register only exists in the Viper PCI systems and is (probably?)
implemented by external logic.
The Base address for this register is found from Offset 14h in the PCI
configuration space.
9100h (R/W): "PCI index register" (9100)
bit 0-7 Selects the offset into the 256byte PCI configuration space accessed
at 9104h. This allows access to the PCI configuration space even in
non-PCI systems.
9104h (R/W): "PCI data register" (9100)
bit 0-7 Each access to this register reads or writes the byte from the PCI
configuration space selected by 9100h. This allows access to the PCI
configuration space even in non-PCI systems.
M+0004h D(R/W): System Configuration Register
bit 0-2 Power 9000 version number. Always 0 on the 9100
9 Pixel writes go to buffer 1 if set, buffer 0 if clear
10 Pixel reads go to buffer 1 if set, buffer 0 if clear
11 If set swaps bits within each 32 bit DWORD when accessing display
memory (similar to the bit swap for register accesses)
12 If set swaps bytes within each 32 bit DWORD when accessing display
memory (similar to the byte swap for register accesses)
13 If set swaps halfwords within each 32 bit DWORD when accessing
display memory (similar to the halfword swap for register accesses)
14-22 The width of a scanline in pixels is determined by adding the
result of the three 3bit fields (Bits 14-16, 17-19 and 20-22).
Each field selects: 0: 0, 1: 32, 2: 64, 3: 128, 4: 256, 5: 512,
6: 1024, 7: 2048. Thus a width of 1280 is achieved by having
one field with 0, one with 4 and one with 6 (0+256+1024 = 1280).
23 Must be 0
24 If set the Frame Buffer Controller has double load, normal if clear
25 Must be 0
26-28 (9100) Pixel Size. 0: 8bpp, 1: 16bpp, 2: 24bpp
29-20 (9100) Shift3. Fourth subfield for the scanline width in bits 14-22
M+0008h D(R/W): Interrupt Register
bit 0 The drawing engine is idle if set, busy if clear
1 Must be set on writes for bit 0 to be updated. Reads as 1
2 If set a pick is done
3 Must be set on writes for bit 2 to be updated. Reads as 1
4 If set a vertical blanking has occured
5 Must be set on writes for bit 4 to be updated. Reads as 1
Note: The interrupt status bits (Bits 0,2,4) are sticky, once the condition
has occured they remain set until cleared by a write. If an interrupt
status bit (Bits 0,2,4) is set an interrupt will be generated if allowed
by the Interrupt Enable register (M+0000Ch).
M+000Ch D(R/W): Interrupt Enable
bit 0 If set allows interrupt when the drawing engine goes idle
1 Must be set on writes for bit 0 to be updated. Reads as 1
2 If set allows interrupt when a pick occurs
3 Must be set on writes for bit 2 to be updated. Reads as 1
4 If set allows interrupt when vertical blanking occurs
5 Must be set on writes for bit 4 to be updated. Reads as 1
6 If set allows interrupts as specified by bits 0,2 and 4, if clear
all interrupts are disabled
7 Must be set on writes for bit 6 to be updated. Reads as 1
M+0010h D(R/W): Alternate Read Bank (9100)
bit 16-22 Read bank. Selects the 64K block accessed by reading at Axxxxh
M+0014h D(R/W): Alternate Write Bank (9100)
bit 16-22 Write bank. Selects the 64K block accessed by writing to Axxxxh
M+0104h D(R): Horizontal Counter (hrzc)
bit 0-11 The currently displayed pixel in DDOTCLK clocks from the start of
Horizontal Retrace (Falling edge of HSYNC-).
M+0108h D(R/W): Horizontal Length (hrzt)
bit 0-11 The total number of DDOTCLK clocks in a scanline including blanking
. and retrace
M+010Ch D(R/W): Horizontal Sync Rising Edge (hrzsr)
bit 0-11 The HSYNC- pulse width in number of DDOTCLK clocks.
M+0110h D(R/W): Horizontal Blank Rising Edge (hrzbr)
bit 0-11 The number of DDOTCLK clocks from the start of horizontal retrace
(Falling edge of HSYNC-) to the end of blanking (Rising edge of
HBLNK-)
M+0114h D(R/W): Horizontal Blank Falling Edge (hrzbf)
bit 0-11 The number of DDOTCLK clocks from the start of the horizontal
retrace (Falling edge of HSYNC-) to the start of blanking (Falling
edge of HBLNK-)
M+0118h D(R/W): Horizontal Counter Preload Value (prehrzc)
bit 0-11 The value to load into the Horizontal Counter (M+100104h) when an
internal or external HSYNC- is received to allow synchronisation
with an external source. Should be set to 0 if external sync is not
used.
M+011Ch D(R): Vertical Counter (vrtc)
bit 0-11 The currently displayed line number
M+0120h D(R/W): Vertical Length (vrtt)
bit 0-11 The total number of lines in a frame including blanking and retrace
M+0124h D(R/W): Vertical Sync Rising Edge (vrtsr)
bit 0-11 The width of the Vertical Sync (VSYMC-) pulse in scanlines
M+0128h D(R/W): Vertical Blank Rising Edge (vrtbr)
bit 0-11 The number of scanlines from the start of Vertical Retrace (Falling
edge of VSYNC-) to the end of Vertical Blanking (Rising edge of
VBLNK-)
M+012Ch D(R/W): Vertical Blank Falling Edge (vrtbf)
bit 0-11 The number of scanlines from the start of Vertical Retrace (Falling
edge of VSYNC-) to the start of Vertical Blanking (Falling edge of
VBLNK-)
M+0130h D(R/W): Vertical Counter Preload Value (prevrtc)
bit 0-11 The value to load into the Vertical Counter (M+18011Ch) when an
internal or external VSYNC- is received to allow synchronization
with external video sources. Should be set to 0 if external sync is
not used.
M+0134h D(R): Screen Repaint Address (sraddr)
bit 0-11 The next VRAM row address to load into the VRAM. This is bits 10-21
of the linear memory address. When Vertical Blanking starts this
register is set to 0 (or the start address of the second buffer).
M+0138h D(R/W): Screen Repaint Timing Control (srtctl)
bit 0-2 QSF counter position. Selects which bit in the QSF counter register
(M+013Ch) causes the next row address transfer.
Typical values:
Memory 1 DDOTCLK 1 DDOTCLK
Config: = 4 dots = 8 dots
1 4 3
2 4 3
3 5 4
4 5 4
5 6 5
3 Set to select buffer 1 for display, clear to select buffer 0
4 Set to select Restricted (HBLNK- reload) mode, clear to select
normal (split shift) mode.
5 Set for normal operation, clear for Blanks asserted
6 Set to select Composite synchronization, clear to select separate
synchronization
7 Set to select internal HSYNC-, clear to select external HSYNC-
8 Set to select internal VSYNC-, clear to select external VSYNC-
M+013Ch D(R): QSF Counter (qsfcounter or sraddr_inc?)
bit 0-11 Counts DDOTCLK pulses within the current VRAM page, Ie. which bits
are shifted out of the VRAMs
Note: The sraddr_inc and qsfcounter register appears to be the same, but the
documentation leaves some doubt
M+0184h D(R/W): Memory Configuration (mem_config)
bit 0-2 Frame buffer VRAM configuration:
0: Memory Config 1. 8 256Kx4 VRAMs in 1 bank and 1 1Mpixel
buffer
1: Memory Config 2. 8 128Kx8 VRAMs in 2 interleaved banks and
1 1Mpixel buffer
2: Memory Config 3. 16 256Kx4 VRAMs in 2 interleaved banks and
1 2Mpixel buffer
3: Memory Config 4. 16 256Kx4 VRAMs in 2 interleaved banks and
2 1Mpixel buffers
4: Memory Config 5. 32 256Kx4 VRAMs in 4 interleaved banks and
2 2Mpixel buffers
M+0188h D(R/W): Refresh Period (rfperiod)
bit 0-9 The max time between memory refreshes in SYSCLK periods
M+018Ch D(R): Refresh Counter (rfcount)
bit 0-9 This register is decremented on each SYSCLK until it reaches 0,
when a refresh request is made and the register is reloaded from
the Refresh Period Register (M+0188h).
M+0190h D(R/W): RAS Low Maximum (rlmax)
bit 0-9 The maximum time the RAS- signal can be asserted in SYSCLK periods
M+0194h D(R): RAS low count (rlcur)
bit 0-9 When RAS- is asserted this register is loaded with the value in the
RAS Low Maximum register (M+0190h) and then decremented on each
SYSCLK until either RAS- is deasserted, or it reaches 0 in which
case a refresh sequence is started.
M+198h W(?): (9100)
bit 12-15 Number of FIFo slots free ??
Note: Apparently the IBM RGB525 DAC requires a read or write of this register
for the last write to a DAC register at 200h-23Ch takes effect ?
M+200h - M+23Ch D(R/W): DAC regs 0-15 (9100)
bit 0-7 Each access to one of these registers causes a read or write of
the corresponding DAC register (200h is REG00, 210h is REG04...)
The IBM RGB525 DAC apparently requires a read or write of M+198h
after a write to a DAC register ? Usually the same value is
repeated in all four bytes (bits 0-7, 8-15, 16-23 and 24-31) ?
M+2000h D(R): Status Register
bit 0 If set the source coordinates for a quad draw straddle the clipping
window
1 If set the source coordinates for a quad draw are entirely inside
the clipping window
2 If set the source coordinates for a quad draw are entirely outside
the clipping window
3 If set the requested quad is concave
4 If set an exception was encountered for a quad command, the
operation cannot be performed and must be done in software
5 If set an exception was encountered for a blit command, the
operation cannot be performed and must be done in software
6 If set an exception was encountered for a pixel command, the
operation cannot be performed and must be done in software
7 If set a pick was detected. (This is a copy of the pick bit in the
interrupt register (M+0008h bit 2)).
30 If set the drawing engine is busy
31 If set a Quad or Blit operation can not be started
M+2004h D(R): Blit command
Note: Reading this register issues a Blit command using X[0]/Y[0] as the upper
left corner of the source, X[1]/Y[1] as the lower right corner of the
source, X[2]/Y[2] as the upper left corner of the destination and
X[3]/Y[3] as the lower right corner of the destination. The source and
destination areas must be the same size. If the destination is out of
range bit 5 of the Status Register (M+2000h) is set and the operation
must be done in software.
Bit 31 of the Status Register (M+2000h) should be tested before a Quad
operation is issued.
M+2008h D(R): Quad command
Note: Reading this register issues a Quad command using X[0-3],Y[0-3] as
coordinates. If the Quad defined by the coordinates id concave or one
(or more) of the coordinates is out of range bit 4 of the Status
Register (M+2000h) is set and the operation must be done in software.
Bit 31 of the Status Register (M+2000h) should be tested before a Quad
operation is issued.
M+200Ch D(W): Pixel8 command
M+2014h D(W): Next_pixels command
M+2080h - M+20FCh D(W): Pixel1
Note: Writing to this register starts a Pixel1 command of (n+1) pixels,
where n is bits 2-6 of the address written to.
M+2184h D(R): Out of range (OOR) Register
bit 0 Set if y[0] is out of range
1 Set if y[1] is out of range
2 Set if y[2] is out of range
3 Set if y[3] is out of range
4 Set if x[0] is out of range
5 Set if x[1] is out of range
6 Set if x[2] is out of range
7 Set if x[3] is out of range
M+218Ch D(R/W): Cindex
bit 0-1 Selects one of the 4 X/Y coordinate register sets.
M+2190h D(R/W): Window Offset Register
bit 0-15 Y-offset of current window
16-31 X-offset of current window
M+2194h D(R): Parameter Engine Window Minimum Register
bit 0-12 Minimum Y value (top line). Pixels above this line are not drawn
16-28 Minimum X value (left edge). Pixels left of this are not drawn
Note: This register can be read and written at M+2220h
M+2198h D(R): Parameter Engine Window Maximum Register
bit 0-12 Minimum Y value (bottom line). Pixels below this line are not drawn
16-28 Minimum X value (right edge). Pixels right of this are not drawn
Note: This register can be read and written at M+2224h
M+21A0h D(R): Yclip
bit 0 Set if Y[0] > the window maximum (M+2224h)
1 Set if Y[1] > the window maximum (M+2224h)
2 Set if Y[2] > the window maximum (M+2224h)
3 Set if Y[3] > the window maximum (M+2224h)
4 Set if Y[0] < the window minimum (M+2220h)
5 Set if Y[1] < the window minimum (M+2220h)
6 Set if Y[2] < the window minimum (M+2220h)
7 Set if Y[3] < the window minimum (M+2220h)
M+21A4h D(R): Xclip
bit 0 Set if X[0] > the window maximum (M+2224h)
1 Set if X[1] > the window maximum (M+2224h)
2 Set if X[2] > the window maximum (M+2224h)
3 Set if X[3] > the window maximum (M+2224h)
4 Set if X[0] < the window minimum (M+2220h)
5 Set if X[1] < the window minimum (M+2220h)
6 Set if X[2] < the window minimum (M+2220h)
7 Set if X[3] < the window minimum (M+2220h)
M+21A8h D(R): Xedge_lt
bit 0 Set if X[0] > X[2]
1 Set if X[1] > X[3]
2 Set if X[3] > X[0]
3 Set if X[2] > X[3]
4 Set if X[1] > X[2]
5 Set if X[0] > X[1]
M+21ACh D(R): Xedge_gt
bit 0 Set if X[0] < X[2]
1 Set if X[1] < X[3]
2 Set if X[3] < X[0]
3 Set if X[2] < X[3]
4 Set if X[1] < X[2]
5 Set if X[0] < X[1]
M+21B0h D(R): Yedge_lt
bit 0 Set if Y[0] > Y[2]
1 Set if Y[1] > Y[3]
2 Set if Y[3] > Y[0]
3 Set if Y[2] > Y[3]
4 Set if Y[1] > Y[2]
5 Set if Y[0] > Y[1]
M+21B4h D(R): Yedge_gt
bit 0 Set if Y[0] < Y[2]
1 Set if Y[1] < Y[3]
2 Set if Y[3] < Y[0]
3 Set if Y[2] < Y[3]
4 Set if Y[1] < Y[2]
5 Set if Y[0] < Y[1]
M+2200h D(R/W): Foreground Color (fground) (9000)
bit 0-7 The foreground color used in drawing
M+2200h D(R/W): Color 0 (9100)
bit 0-31 Color0. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and
24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31.
M+2204h D(R/W): Background Color (bground)
bit 0-7 The background color used in drawing
M+2204 D(R/W): Color 1 (9100)
bit 0-31 Color1. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and
24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31.
M+2208h D(R/W): Plane Mask (pmask)
bit 0-7 Each bit enables the corresponding plane in the frame buffer if set
M+220Ch D(R/W): Draw mode (draw_mode)
bit 0 If set selects buffer 1 for all drawing operations, if clear
selects buffer 0
1 Must be set on writes for bit 0 to be updated. Reads as 1
2 If set suppresses all writes and sets the picked bit in the
Interrupt Register (M+0008h bit 2)
3 Must be set on writes for bit 2 to be updated. Reads as 1
M+2210h D(R/W): Pattern Origin X (Pat_originx)
bit 0-3 X origin of the pattern
M+2214h D(R/W): Pattern Origin Y (Pat_originy)
bit 0-3 Y origin of the pattern
M+2218h D(R/W): Raster Register (raster)
bit 0-7 (9100) The minterm to use for raster operations.
0-15 (9000) The minterm to use for raster operations.
13 (9100) Solid Color Disable. If set Solid Color is disabled and
Patterns enabled, if clear Solid Color is disabled and Patterns
are disabled.
14 (9100) Pattern Depth. 0: 2color, 1: 4color
15 (9100) Pixel1 Transparent. Enable Pixel1 transparent mode if set
16 If set Quad draw mode is Oversize mode, if clear X11 mode
17 If set enables the pattern (M+2280h - M+229Ch) for Quad draw
operations, if clear disables the pattern by forcing it to all 1's
M+221Ch D(R/W): Pixel8 Register (pixel8_reg)
bit 0-7? Excess data from the last pixel8 operation.
M+2220h D(R/W): Window Minimum Register (w_min)
bit 0-12 Minimum Y value (top line). Pixels above this line are not drawn
16-28 Minimum X value (left edge). Pixels left of this are not drawn
M+2224h D(R/W): Window Maximum Register (w_max)
bit 0-12 Minimum Y value (bottom line). Pixels below this line are not drawn
16-28 Minimum X value (right edge). Pixels right of this are not drawn
M+2238h D(R/W): Color2 (9100)
bit 0-31 Color2. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and
24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31.
M+223Ch D(R/W): Color 3 (9100)
bit 0-31 Color3. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and
24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31.
M+2280h D(R/W): Pattern 0/1 Register (9000)
M+2280h D(R/W): Pattern 0 (9100)
M+2284h D(R/W): Pattern 2/3 Register (9000)
M+2284h D(R/W): Pattern 1 (9100)
M+2288h D(R/W): Pattern 4/5 Register (9000)
M+2288h D(R/W): Pattern 2 (9100)
M+228Ch D(R/W): Pattern 6/7 Register (9000)
M+228Ch D(R/W): Pattern 3 (9100)
M+2290h D(R/W): Pattern 8/9 Register (9000)
M+2290h D(R/W): Software 0 (9100)
M+2294h D(R/W): Pattern 10/11 Register (9000)
M+2294h D(R/W): Software 1 (9100)
M+2298h D(R/W): Pattern 12/13 Register (9000)
M+2298h D(R/W): Software 2 (9100)
M+229Ch D(R/W): Pattern 14/15 Register (9000)
M+229Ch D(R/W): Software 3 (9100)
M+22A0h D(R/W): Byte Window Min (9100)
M+22A4h D(R/W): Byte Window Max (9100)
M+3000h - M+31FFh D(R/W): Device Coordinate Registers
bit 0-31 (Adr bit 3-4 = 1) 32bit X coordinate
0-31 (Adr bit 3-4 = 2) 32bit Y coordinate
0-15 (Adr bit 3-4 = 3) 16bit Y coordinate
16-31 (Adr bit 3-4 = 3) 16bit X coordinate
Note: When these registers are accessed the lower bits of address selects the
X/Y register and the form used as follows:
Address bits:
0-2 Should be 0
3-4 Selects the data: 1: 32bit X value, 2: 32bit Y value,
3: Y in lower 16 bits and X in upper 16 bits
5 If set the data (X/Y) is window relative (only valid for writes),
if clear the data is absolute
6-7 Selects the X/Y coordinate register:
0: X[0]/Y[0], 1: X[1]/Y[1], 2: X[2]/Y[2], 3: X[3]/Y[3]
Note: On the Power9000 these registers can probably also be accessed at
address: M+3400h - M+35FFh (M+181400h - M+1815FFh in Power9000 terms)
as bit 10 of the address is not decoded
M+3200h - M+33FFh D(W): Meta-Coordinate Pseudo regs
bit 0-31 (Adr bit 3-4 = 1) 32bit X coordinate
0-31 (Adr bit 3-4 = 2) 32bit Y coordinate
0-15 (Adr bit 3-4 = 3) 16bit Y coordinate
16-31 (Adr bit 3-4 = 3) 16bit X coordinate
Note: For these registers the data written is the coordinate(s) and the lower
bits of the address specify the drawing operation:
Address bits:
0-2 Should be 0
3-4 Selects the interpretation of the data written to the register.
1: 32bit X value, 2: 32bit Y value, 3: Y in lower 16 bits and
X in upper 16 bits
5 If set the coordinate is relative to the previous one, if clear
it is relative to the window offset
6-8 Type of operation. 0: Point, 1: Line, 2: Triangle,
3: Quadrilateral, 4: rectangle
Note: On the Power9000 these registers can probably also be accessed at
address: M+3600h - M+37FFh (M+181600h - M+1817FFh in Power9000 terms)
as bit 10 of the address is not decoded
4386-9h DAC
8386-9h DAC
C386-9h DAC
PCI Configuration space:
Byte 41h Bit 2 Set to access the DAC registers at A000h
Bit 3 Set to access the graphics engine registers at A000h
Memory Locations:
0:0487h (9100) Bit 4. Set for IBM RGB525 DAC, clear for Bt485 DAC
0:0489h (9100) Bit 5. Set for 4MB video memory, clear for 2MB
----------1DAA-------------------------------
INT 10 - VIDEO - Diamond Get System Info (Viper Pro)
AX = 1DAAh
BX = FDECh
Return: BX = CEDFh if Viper Pro (Weitek P9100)
AL = Memory Type:
01h: 1MB 8 128Kx8
02h: 2MB 8 256Kx8 or 16 256Kx4
04h: 4MB
10h: 1MB 8 256Kx4
AH = Bits 0-3 = DAC type:
0: Normal 8bit DAC
1: Sierra 15/16bit DAC
2: MUSIC MU9c1880/Diamond SS24
3: Brooktree Bt485
7: IBM RGB525
4 = VGA chip. 0: Weitek 5x86, 1: Oak OTI-087
5 = Bus type: 0: VLB bus, 1: PCI bus.
SI:DI -> Viper BIOS string